/*
 * DeformacionCurvasBernstein.h
 *
 *  Created on: 23/04/2013
 *      Author: gonzalo
 */

#ifndef DEFORMACIONCURVASBERNSTEIN_H_
#define DEFORMACIONCURVASBERNSTEIN_H_

#include "DeformacionSuperficial.h"
#include "../curvas/Casteljau.h"
#include <random>

class DeformacionCurvasBernstein: public DeformacionSuperficial {
private:
	Casteljau * curvas_origen;
	Casteljau * curvas_destino;
	Casteljau curva_interpolante;
	GLuint cant_curvas;
	GLuint cant_puntos_de_control;
	GLfloat altura;
	GLfloat paso;
	GLfloat velocidad;
	GLfloat y_interpolado;

	std::default_random_engine generator;
	std::uniform_real_distribution<float> distribution;

public:
	DeformacionCurvasBernstein(GLuint cantidad_curvas, GLuint puntos_de_control_por_curva, GLfloat altura);
	virtual ~DeformacionCurvasBernstein();

	virtual GLfloat obtener_deformacion(GLfloat x, GLfloat y);

	void set_velocidad_de_deformacion(GLfloat velocidad);
	void cambiar_curvas_deformacion();
	void actualizar_deformacion();

};

#endif /* DEFORMACIONCURVASBERNSTEIN_H_ */
